package com.dycs.utils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author z1853
 */
public class JsonCollectionByJsons {

    /**
     * 获取多个json对象的交集
     * @param list json对象对应的map的集合
     * @return json交集对应的map集合
     */
    public static Map<String, Object> getIntersection(List<Map<String,Object>> list) {

        Map<String,Object> map = new HashMap<>();
        if (list.size() != 0){
            init(map,list.get(0));
            for (int i=1; i<list.size(); i++){
                map = getIntersectionByOne(map,list.get(i));
            }
        }
        return map;
    }

    /**
     * 初始化map集合
     * @param map 用于存储交集中的key-value
     * @param first list中的第一个json对象对应的map
     */
    public static void init(Map<String,Object> map, Map<String,Object> first) {
        map.putAll(first);
    }

    /**
     * 单个json对象取交集
     * @param map 用于存储交集中的key-value
     * @param one 单个json对象对应的map
     * @return 更新后的json交集对应的map
     */
    public static Map<String,Object> getIntersectionByOne(Map<String,Object> map, Map<String,Object> one){

        Map<String,Object> returnMap = new HashMap<>();
        map.forEach((k,v) -> {
            if (v.equals(one.get(k))){
                returnMap.put(k,v);
            }
        });
        return returnMap;
    }

    /**
     * 将map转化为json字符串
     * @param map 用于存储key-value
     * @return json字符串
     */
    @SuppressWarnings("unchecked")
    public static String jsonSplit(Map<String,Object> map){
        StringBuilder json = new StringBuilder();
        json.append('{');
        if (map.size() != 0){
            map.forEach((k,v) -> {
                json.append('"').append(k).append('"').append(":");
                if (v instanceof Map){
                    json.append(jsonSplit((Map<String, Object>) v)).append(',');
                }else {
                    json.append(v).append(',');
                }
            });
            json.deleteCharAt(json.length()-1);
        }
        json.append('}');
        return json.toString();
    }

}
